<?php
namespace app\model;

use think\Model;

class OperationLog extends Model
{
    // 设置表名
    protected $name = 'operation_log';
    
    // 自动写入时间戳
    protected $autoWriteTimestamp = true;
    
    // 定义时间戳字段名
    protected $createTime = 'create_time';
    protected $updateTime = false;
    
    // 定义字段信息
    protected $schema = [
        'id'             => 'int',
        'user_id'        => 'int',
        'username'       => 'string',
        'operation'      => 'string',
        'method'         => 'string',
        'url'            => 'string',
        'ip'             => 'string',
        'location'       => 'string',
        'browser'        => 'string',
        'os'             => 'string',
        'module'         => 'string',
        'business_type'  => 'int',
        'request_method' => 'string',
        'request_param'  => 'string',
        'status'         => 'int',
        'error_message'  => 'string',
        'response_data'  => 'string',
        'cost_time'      => 'int',
        'create_time'    => 'datetime'
    ];
    
    /**
     * 关联用户表
     */
    public function user()
    {
        return $this->belongsTo(User::class, 'user_id');
    }
    
    /**
     * 操作日志搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchOperationAttr($query, $value)
    {
        if (!empty($value)) {
            $query->whereLike('operation', '%' . $value . '%');
        }
    }
    
    /**
     * 用户名搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchUsernameAttr($query, $value)
    {
        if (!empty($value)) {
            $query->whereLike('username', '%' . $value . '%');
        }
    }
    
    /**
     * IP搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchIpAttr($query, $value)
    {
        if (!empty($value)) {
            $query->whereLike('ip', '%' . $value . '%');
        }
    }
    
    /**
     * 模块搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchModuleAttr($query, $value)
    {
        if (!empty($value)) {
            $query->where('module', $value);
        }
    }
    
    /**
     * 业务类型搜索器
     * @param \think\db\Query $query 查询对象
     * @param int $value 搜索值
     */
    public function searchBusinessTypeAttr($query, $value)
    {
        if (isset($value) && $value !== '') {
            $query->where('business_type', $value);
        }
    }
    
    /**
     * 状态搜索器
     * @param \think\db\Query $query 查询对象
     * @param int $value 搜索值
     */
    public function searchStatusAttr($query, $value)
    {
        if (isset($value) && $value !== '') {
            $query->where('status', $value);
        }
    }
    
    /**
     * 时间范围搜索器
     * @param \think\db\Query $query 查询对象
     * @param array $value 搜索值 [开始时间, 结束时间]
     */
    public function searchTimeRangeAttr($query, $value)
    {
        if (!empty($value) && is_array($value) && count($value) == 2) {
            $query->whereBetweenTime('create_time', $value[0], $value[1]);
        }
    }
} 